<?php

    // 네이버 지도api 키값
    $map_key = "key=3c84bb8922a20c0";
    $map_coord = "coord=latlng";
    if (!$map_query) $map_query = "서울특별시 마포구 합정동 414-1";
    
    // 여기부터 주소 검색 xml 파싱
    $pquery = $map_key. "&coord=latlng&query=". str_replace(" ","",$map_query);
  $fp = fsockopen ("map.naver.com", 80, $errno, $errstr, 30); 
    if (!$fp) { 
        echo "$errstr ($errno)";
        //exit;
    } else {
        fputs($fp, "GET /api/geocode.php?"); 
        fputs($fp, $pquery); 
        fputs($fp, " HTTP/1.1\r\n"); 
        fputs($fp, "Host: map.naver.com\r\n"); 
        fputs($fp, "Connection: Close\r\n\r\n"); 
         
        $header = ""; 
        while (!feof($fp)) { 
            $out = fgets ($fp,512); 
            if (trim($out) == "") { 
                break; 
            } 
            $header .= $out; 
        } 
         
        $mapbody = ""; 
        while (!feof($fp)) { 
            $out = fgets ($fp,512); 
            $mapbody .= $out; 
        } 
        
        $idx = strpos(strtolower($header), "transfer-encoding: chunked"); 
         
        if ($idx > -1) { // chunk data 
            $temp = ""; 
            $offset = 0; 
            do { 
                $idx1 = strpos($mapbody, "\r\n", $offset); 
                $chunkLength = hexdec(substr($mapbody, $offset, $idx1 - $offset)); 
                 
                if ($chunkLength == 0) { 
                    break; 
                } else { 
                    $temp .= substr($mapbody, $idx1+2, $chunkLength); 
                    $offset = $idx1 + $chunkLength + 4; 
                } 
            } while(true); 
            $mapbody = $temp; 
        } 
        //header("Content-Type: text/xml; charset=utf-8"); 
        fclose ($fp); 
    }     
    // 여기까지 주소 검색 xml 파싱

 // 여기부터 좌표값 변수에 등록
    $map_x_point_1=explode("<x>", $mapbody); 
    $map_x_point_2=explode("</x>", $map_x_point_1[1]); 
    $map_x_point=$map_x_point_2[0]; 
    $map_y_point_1=explode("<y>", $mapbody); 
    $map_y_point_2=explode("</y>", $map_y_point_1[1]); 
    $map_y_point=$map_y_point_2[0]; 
    // 여기까지 좌표값 변수에 등록

 echo $map_query."<br>";
 echo $map_x_point."<br>";
 echo $map_y_point;

 ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>OpenAPI 2.0 - 지도 생성</title>
  <!-- prevent IE6 flickering -->
  <script type="text/javascript">
   try {document.execCommand('BackgroundImageCache', false, true);} catch(e) {}
  </script>

<script type="text/javascript" src="http://openapi.map.naver.com/openapi/naverMap.naver?ver=2.0&<?=$map_key?>"></script>
</head>

<body>
<div id="testMap" style="border:0px solid #000; width:800px; height:450px; margin:0px;"></div>
<script type="text/javascript">
/- 레이어닫기 *-
function ViewLayer() {
 document.getElementById("pop").style.display="none"
}
/- 레이어닫기 끝 *-

/- 지도시작 *-
 var oPoint = new nhn.api.map.LatLng(37.54,126.97);
 nhn.api.map.setDefaultPoint('LatLng');
 oMap = new nhn.api.map.Map('testMap' ,{
   point : oPoint, // 지도 중심점의 좌표
   zoom : 7, // 지도의 축척 레벨
   enableWheelZoom : true, //마우스휠로 지도 확대,축소
   enableDragPan : true, //마우스로 지도 움직이게, 혹은 고정
   enableDblClickZoom : false, //더블클릭으로 지도 확대
   mapMode : 0, // 지도 모드(?0 : 일반 지도, 1 : 겹침 지도, 2 : 위성 지도)
   activateTrafficMap : false, // 실시간 교통 활성화 여부
   activateBicycleMap : false, // 자전거 지도 활성화 여부
   minMaxLevel : [ 5, 13 ], // 지도의 최소/최대 축척 레벨
   size : new nhn.api.map.Size(800, 450), // 지도의 크기
   detectCoveredMarker : Boolean // 겹쳐 있는 마커를 클릭했을 때 겹친 마커 목록 표시 여부
 });
 
 /- 줌컨트롤 *-
 var oSlider = new nhn.api.map.ZoomControl();
 oMap.addControl(oSlider);
 oSlider.setPosition({top:50,right:10});
 
 /- 지도타입 *-
 var oMapTypeBtn = new nhn.api.map.MapTypeBtn();
 oMap.addControl(oMapTypeBtn);
 oMapTypeBtn.setPosition({top:10,right:150});
  
 /- 자전거지도 *-
 var oThemeMapBtn = new nhn.api.map.ThemeMapBtn();
 oThemeMapBtn.setPosition({top:10,right:10});
 oMap.addControl(oThemeMapBtn);

 /- 실시간교통상황 *-
 var trafficButton = new nhn.api.map.TrafficMapBtn();
 trafficButton.setPosition({top:10, right:80});
 oMap.addControl(trafficButton);

 /- 마커 *-
 var mPoint = new nhn.api.map.LatLng('<?=$map_y_point?>','<?=$map_x_point?>');
 var oSize = new nhn.api.map.Size(28, 37);
 var oOffset = new nhn.api.map.Size(14, 37);

 var oIcon = new nhn.api.map.Icon("http://static.naver.com/maps2/icons/pin_spot2.png", oSize);

 var oMarker = new nhn.api.map.Marker(oIcon, {
  point : mPoint,
  zIndex : 1,
  title : '<?=$map_query?> :'+ mPoint.toString()
 });
    oMap.addOverlay(oMarker);

 var oLabel = new nhn.api.map.MarkerLabel(); // - 마커 라벨 선언.
 oMap.addOverlay(oLabel); // - 마커 라벨 지도에 추가. 기본은 라벨이 보이지 않는 상태로 추가됨.

 oMap.attach('mouseenter', function(oCustomEvent) {
    var oTarget = oCustomEvent.target;
    // 마커위에 마우스 올라간거면
    if (oTarget instanceof nhn.api.map.Marker) {
     var oMarker = oTarget;
     oLabel.setVisible(true, oMarker); // - 특정 마커를 지정하여 해당 마커의 title을 보여준다.
    }
   });

 oMap.attach('mouseleave', function(oCustomEvent) {
    var oTarget = oCustomEvent.target;
    // 마커위에서 마우스 나간거면
    if (oTarget instanceof nhn.api.map.Marker) {
     oLabel.setVisible(false);
    }
   });


 var oInfoWnd = new nhn.api.map.InfoWindow();
  oInfoWnd.setVisible(false);
  oMap.addOverlay(oInfoWnd);
 
  oInfoWnd.setPosition({
   top : 20,
   left :20
  });

 

 oMap.attach('click', function(oCustomEvent) {
   var mPoint = oCustomEvent.point;
   var oTarget = oCustomEvent.target;
   oInfoWnd.setVisible(false);
   // 마커 클릭하면
   if (oTarget instanceof nhn.api.map.Marker) {
    // 겹침 마커 클릭한거면
    if (oCustomEvent.clickCoveredMarker) {
     return;
    }
    // - InfoWindow 에 들어갈 내용은 setContent 로 자유롭게 넣을 수 있습니다. 외부 css를 이용할 수 있으며, 
    // - 외부 css에 선언된 class를 이용하면 해당 class의 스타일을 바로 적용할 수 있습니다.
    // - 단, DIV 의 position style 은 absolute 가 되면 안되며, 
    // - absolute 의 경우 autoPosition 이 동작하지 않습니다. 
    oInfoWnd.setContent('<div id="pop" style="border-top:1px solid; border-bottom:2px groove black; border-left:1px solid; border-right:2px groove black;margin-bottom:1px;color:black;background-color:white; width:auto; height:auto;">'+
     '<span style="color: #000000 !important;display: inline-block;font-size: 12px !important;font-weight: bold !important;letter-spacing: -1px !important;white-space: nowrap !important; padding: 2px 5px 2px 2px !important">' + 
     '<?=$map_query?> <br /> ' + oTarget.getPoint()
     +'</span><a href="javas-ript:ViewLayer();"><img src="http://static.naver.com/maps2/btn_layer_close.gif" width="19" height="18" alt="레이어 닫기" border="0"></a><?=$aaa?></div>');
    oInfoWnd.setPoint(oTarget.getPoint());
    oInfoWnd.setPosition({right : 15, top : 30});
    oInfoWnd.setVisible(true);
    oInfoWnd.autoPosition();
    return;
   }
  });

</script>
</body>
</html>
